iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0
Software Development

從零開始!使用chatGPT製作Unity回合制卡牌遊戲系列 第 22

從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 22 - Unity Panel:遊戲Menu、Sub-Menu

  • 分享至 

  • xImage
  •  

昨天計畫了許多事情,那今天要做的可就多了。
先給大家看看今天的進度:
https://ithelp.ithome.com.tw/upload/images/20231006/20163235hC1fXhAa8s.png

哇!
好像多了很多不一樣的東西。

但是萬變不離其宗,我們前三個禮拜的練習與實作的是有用的。

所以我做了什麼呢?

  1. 我做了一個按鈕,改好TextMeshPro文字字型效果與大小。
  2. 寫好遊戲菜單控制程式碼MainMenuController。
  3. 複製許多按鈕,可以進入「新遊戲」、「載入遊戲」、「查看成就」、「關閉遊戲」。
  4. 製作遊戲模式子菜單GameModeSelectionController。
  5. 寫好遊戲模式子菜單程式碼,聯繫與主菜單的程式碼。
  6. 製作面板,並將按鈕放入並製成主菜單。
  7. 複製面板,修改細節成遊戲模式子菜單。
  8. 同上,製作成離開遊戲子菜單。

好咧。
那有什麼新的技術嗎?
有!
我的子菜單是由Panel所實作的。

把許多UI/UX物件放在Panel上,
就能藉由開啟或關閉Panel來顯示或不顯示介面。
這不需要重新加載場景,所以不會耗費時間在不同簡單介面切換。

該怎麼製作呢?
首先,在已經存在的Canvas上右鍵,創立Panel。
https://ithelp.ithome.com.tw/upload/images/20231006/20163235VogBgV8VKw.png

在上面設置好各個按鈕,編輯好各個按鈕的文字。
接著,需要實作菜單邏輯,並連接好與按鈕的互動關係。
建立遊戲主選單與模式選擇子選單的邏輯遊戲物件。
https://ithelp.ithome.com.tw/upload/images/20231006/20163235rijM1uuTyO.png

然後上程式碼!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MainMenuController : MonoBehaviour
{
    public GameModeSelectionController gameModeSelection;
    public QuitGameController quitGame;

    public void StartNewGame()
    {
        SceneManager.LoadScene("GameMapScene"); // Load your game scene
    }

    public void LoadGame()
    {
        // Implement loading game state
    }

    public void CheckAchievements()
    {
        // Implement achievement logic
    }

    public void QuitGame()
    {
        Application.Quit(); // Quit the application
    }

    // Buttons clicked

    public void StartNewGameButtonClicked()
    {
        gameModeSelection.ShowGameModeSelectionPanel();
    }

    public void LoadGameButtonClicked()
    {
        
    }

    public void CheckAchievementButtonClicked()
    {
        
    }

    public void QuitGameButtonClicked()
    {
        quitGame.ShowQuitGamePanel();
    }


    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

}

然後編輯器中要一一設定按鈕OnClicked()對應函式。
https://ithelp.ithome.com.tw/upload/images/20231006/20163235t68gu5kYIh.png
這邊是主選單的。
可以看到新開始遊戲有這麼一行程式碼:

SceneManager.LoadScene("GameMapScene"); // Load your game scene

這是用來載入新場景的。
但是我們還沒實作那部分,所以先創造一個空場景,並輸入名稱就好。
還有這次的重點:

gameModeSelection.ShowGameModeSelectionPanel();

我們一開始會將Panel設定成關閉:
https://ithelp.ithome.com.tw/upload/images/20231006/20163235vAeT2Nu8Xm.png

然後在程式碼內設為顯示。


往下是模式選擇子選單的。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameModeSelectionController : MonoBehaviour
{
    public GameObject gameModeSelectionPanel;
    public MainMenuController mainMenuController;

    public enum GameMode
    {
        Standard,
        Craze,
        Mythic,
        TheWorld,
        // Add more as needed
    }

    public GameMode currentgameMode;

    public void ShowGameModeSelectionPanel()
    {
        gameModeSelectionPanel.SetActive(true);
    }

    // Buttons clicked

    public void StandardButtonClicked()
    {
        currentgameMode = GameMode.Standard;
    }

    public void CrazeButtonClicked()
    {
        currentgameMode = GameMode.Craze;
    }

    public void MythicButtonClicked()
    {
        currentgameMode = GameMode.Mythic;
    }

    public void TheWorldButtonClicked()
    {
        currentgameMode = GameMode.Mythic;
    }

    public void BackToMainMenuButtonClicked()
    {
        gameModeSelectionPanel.SetActive(false);
    }

    public void StartNewGameButtonClicked()
    {
        mainMenuController.StartNewGame();
    }

    // Start is called before the first frame update
    void Start()
    {
        currentgameMode = GameMode.Standard;
        gameModeSelectionPanel.SetActive(false);
    }

}

我們初始設立一個遊戲物件:

public GameObject gameModeSelectionPanel;

這就是讓我們傳入Panel:
https://ithelp.ithome.com.tw/upload/images/20231006/201632356mXjFIyaqr.png

然後我們在主選單中宣告了:

public GameModeSelectionController gameModeSelection;

讓我們能夠使用該程式碼內的資產。
In this case, THE PANEL.
對啦,還有很多函式互相呼叫也是。


是不是很神奇呢?

這次就先這樣,我要休啦!


上一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 21 - 計劃整頓:遊戲系統與菜單
下一篇
從零開始!使用chatGPT製作Unity回合制卡牌遊戲 Day 23 - Unity Panel與函式
系列文
從零開始!使用chatGPT製作Unity回合制卡牌遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言